using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._ImageAnalystTools._MotionImagery
{
    /// <summary>
    /// <para>Video Metadata To Feature Class</para>
    /// <para>Extracts the platform, frame center, frame outline, and attributes metadata from an FMV-compliant video. The output geometry and attributes are saved as feature classes.</para>
    /// <para>从符合 FMV 标准的视频中提取平台、帧中心、帧轮廓和属性元数据。输出几何和属性将另存为要素类。</para>
    /// </summary>    
    [DisplayName("Video Metadata To Feature Class")]
    public class VideoMetadataToFeatureClass : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public VideoMetadataToFeatureClass()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_video">
        /// <para>Input Video</para>
        /// <para>The FMV-compliant input video file containing essential metadata for each frame of the video data. The supported video file types include PS, TS, MPG, MPEG, MP2, MPG2, MPEG2, MP4, MPG4, MPEG4, H264, VOB, and M2TS.</para>
        /// <para>符合 FMV 标准的输入视频文件，包含视频数据每帧的基本元数据。支持的视频文件类型包括 PS、TS、MPG、MPEG、MP2、MPG2、MPEG2、MP4、MPG4、MPEG4、H264、VOB 和 M2TS。</para>
        /// </param>
        public VideoMetadataToFeatureClass(object _in_video)
        {
            this._in_video = _in_video;
        }
        public override string ToolboxName => "Image Analyst Tools";

        public override string ToolName => "Video Metadata To Feature Class";

        public override string CallName => "ia.VideoMetadataToFeatureClass";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_video, _csv_file, _flightpath, _flightpath_type.GetGPValue(), _imagepath, _imagepath_type.GetGPValue(), _footprint, _start_time, _stop_time, _min_distance, _min_time];

        /// <summary>
        /// <para>Input Video</para>
        /// <para>The FMV-compliant input video file containing essential metadata for each frame of the video data. The supported video file types include PS, TS, MPG, MPEG, MP2, MPG2, MPEG2, MP4, MPG4, MPEG4, H264, VOB, and M2TS.</para>
        /// <para>符合 FMV 标准的输入视频文件，包含视频数据每帧的基本元数据。支持的视频文件类型包括 PS、TS、MPG、MPEG、MP2、MPG2、MPEG2、MP4、MPG4、MPEG4、H264、VOB 和 M2TS。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Video")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_video { get; set; }


        /// <summary>
        /// <para>Output Metadata File</para>
        /// <para><xdoc>
        ///   <para>A comma-separated values (CSV) file containing metadata about the video frames for specific times.</para>
        ///   <para>This metadata file is in the same format used by the Video Multiplexer tool.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>逗号分隔值 （CSV） 文件，包含特定时间的视频帧的元数据。</para>
        ///   <para>此元数据文件采用与视频多路复用器工具相同的格式。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Metadata File")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _csv_file { get; set; } = null;


        /// <summary>
        /// <para>Output Flight Path Feature Class</para>
        /// <para>The feature class containing the sensor's flight path information.</para>
        /// <para>包含传感器飞行路径信息的要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Flight Path Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _flightpath { get; set; } = null;


        /// <summary>
        /// <para>Flight Path Feature Class Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the feature class type for the flight path.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—Point feature class.</bullet_item><para/>
        ///     <bullet_item>Polyline—Polyline feature class. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定飞行路径的要素类类型。</para>
        ///   <bulletList>
        ///     <bullet_item>点—点要素类。</bullet_item><para/>
        ///     <bullet_item>折线 - 折线要素类。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Flight Path Feature Class Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _flightpath_type_value _flightpath_type { get; set; } = _flightpath_type_value._POLYLINE;

        public enum _flightpath_type_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—Point feature class.</para>
            /// <para>点—点要素类。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("POINT")]
            _POINT,

            /// <summary>
            /// <para>Polyline</para>
            /// <para>Polyline—Polyline feature class. This is the default.</para>
            /// <para>折线 - 折线要素类。这是默认设置。</para>
            /// </summary>
            [Description("Polyline")]
            [GPEnumValue("POLYLINE")]
            _POLYLINE,

        }

        /// <summary>
        /// <para>Output Image Path Feature Class</para>
        /// <para>The output feature class containing the image path information.</para>
        /// <para>包含图像路径信息的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Image Path Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _imagepath { get; set; } = null;


        /// <summary>
        /// <para>Image Path Feature Class Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the feature class type for the image path. If you're using a point output, the center of each video frame image will appear on the map.</para>
        ///   <bulletList>
        ///     <bullet_item>Point—Point feature class.</bullet_item><para/>
        ///     <bullet_item>Polyline—Polyline feature class. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定影像路径的要素类类型。如果您使用的是点输出，则每个视频帧图像的中心将显示在地图上。</para>
        ///   <bulletList>
        ///     <bullet_item>点—点要素类。</bullet_item><para/>
        ///     <bullet_item>折线 - 折线要素类。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Image Path Feature Class Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _imagepath_type_value _imagepath_type { get; set; } = _imagepath_type_value._POLYLINE;

        public enum _imagepath_type_value
        {
            /// <summary>
            /// <para>Point</para>
            /// <para>Point—Point feature class.</para>
            /// <para>点—点要素类。</para>
            /// </summary>
            [Description("Point")]
            [GPEnumValue("POINT")]
            _POINT,

            /// <summary>
            /// <para>Polyline</para>
            /// <para>Polyline—Polyline feature class. This is the default.</para>
            /// <para>折线 - 折线要素类。这是默认设置。</para>
            /// </summary>
            [Description("Polyline")]
            [GPEnumValue("POLYLINE")]
            _POLYLINE,

        }

        /// <summary>
        /// <para>Output Image Footprint Feature Class</para>
        /// <para>The output feature class containing the video image footprint information.</para>
        /// <para>包含视频影像轮廓线信息的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Image Footprint Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _footprint { get; set; } = null;


        /// <summary>
        /// <para>Metadata Capture Start Time</para>
        /// <para>The metadata recording start time from the beginning of the video. The input format is d.hh:mm:ss, and the default start time is 0.00:00:00. Metadata time stamps are not used in this field; the time of the video file is used.</para>
        /// <para>从视频开头开始的元数据记录开始时间。输入格式为 d.hh：mm：ss，默认开始时间为 0.00：00：00。此字段中不使用元数据时间戳;使用视频文件的时间。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Metadata Capture Start Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _start_time { get; set; } = null;


        /// <summary>
        /// <para>Metadata Capture Stop Time</para>
        /// <para>The metadata recording end time. The input format is d.hh:mm:ss. If not set, the value will default to the end of the video. Metadata time stamps are not used in this field.</para>
        /// <para>元数据记录结束时间。输入格式为 d.hh：mm：ss。如果未设置，则该值将默认为视频末尾。此字段中不使用元数据时间戳。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Metadata Capture Stop Time")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _stop_time { get; set; } = null;


        /// <summary>
        /// <para>Minimum Distance Between Features</para>
        /// <para>The distance between the features in sequential video frames. If left blank, every metadata feature will be extracted and added to the feature class.</para>
        /// <para>连续视频帧中要素之间的距离。如果留空，则将提取每个元数据要素并将其添加到要素类中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Distance Between Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public string? _min_distance { get; set; } = null;


        /// <summary>
        /// <para>Minimum Time Between Features</para>
        /// <para>The time interval between the features in sequential video frames. If left blank, every metadata feature will be extracted and added to the feature class.</para>
        /// <para>连续视频帧中要素之间的时间间隔。如果留空，则将提取每个元数据要素并将其添加到要素类中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Minimum Time Between Features")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _min_time { get; set; } = null;


        public VideoMetadataToFeatureClass SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}